/******************************************************************

			           							
  * File    : app_device.h
  * By      : luofei
  * Version : V1.0
  * time    : 2013/01/16
********************************************************************/

#ifndef APP_DEVICE_H
#define APP_DEVICE_H

#include "../bsp_data/bsp_queue.h"
#include "../bsp_data/bsp_list.h"



typedef uint16_t (*DEVICE_RECV)( void *,unsigned char *,uint16_t );
typedef uint16_t (*DEVICE_SEND_CMOT)( void *,unsigned char *,uint16_t );
typedef uint16_t (*DEVICE_SEND_TMOT)( void *);

typedef uint16_t (*DEVICE_SEND_FUC)(  unsigned char *,uint16_t );
typedef struct _app_Device{
	
	DEVICE_RECV            d_recv;
	DEVICE_SEND_CMOT       d_create_timer;
	DEVICE_SEND_TMOT       d_deal_timerout;
	DEVICE_SEND_FUC        d_send_fuc;

	//Recv
	cir_queue				c_RecvBuffer;

	//Send
	cir_queue				c_SendBuffer;

//////////////////////////////////////////////////////////////////////////
#if BSP_OS_EN == 1

	OS_EVENT               *p_OS_RecvEvent;
	OS_EVENT               *p_OS_SendEvent;
#endif

//////////////////////////////////////////////////////////////////////////
#if STM32F103_DEVICE_DMA  == 1

	unsigned char          *p_DMA_RecvBuffer;

	unsigned char          *p_DMA_SendBuffer;
#endif

	list_unit              l_unit;
}appdevice,*p_appdevice;

/*****************************************************                       
*				bsp_init_device	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void bsp_init_device( p_appdevice p_Device,
						 DEVICE_RECV      p_recv,
						 DEVICE_SEND_CMOT p_create,
						 DEVICE_SEND_TMOT p_timerout,
						 DEVICE_SEND_FUC  p_send );


/*****************************************************                       
*				bsp_set_devicerecv	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void bsp_set_device_recv( p_appdevice p_Device,
						    unsigned char *p_Data,
							unsigned char  u_max,
							unsigned char  u_per );

/*****************************************************                       
*				bsp_set_devicerecv	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void bsp_set_device_send( p_appdevice p_Device,
						    unsigned char *p_Data,
							unsigned char  u_max,
							unsigned char  u_per );


/*****************************************************                       
*				bsp_set_device_recv_event	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void bsp_set_device_recv_event( p_appdevice p_Device, OS_EVENT *_event );


/*****************************************************                       
*				bsp_set_device_recv_event	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void bsp_set_device_send_event( p_appdevice p_Device, OS_EVENT *_event );

//////////////////////////////////////////////////////////////////////////
/*****************************************************                       
*				bsp_get_device_recv
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_get_device_recv( p_appdevice p_Device, unsigned char *p_Data ,
								   unsigned char *p_len ) ;

/*****************************************************                       
*				bsp_get_device_send
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_get_device_send( p_appdevice p_Device, unsigned char *p_Data ,
								   unsigned char *p_len ) ;
/////////////////////////////////////////////////////////////////////////
/*****************************************************                       
*				bsp_trigger_device_recv
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_trigger_device_recv( p_appdevice p_Device, unsigned char *p_Data, 
					   unsigned char u_len );


/*****************************************************                       
*				bsp_trigger_device_send
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_trigger_device_send( p_appdevice p_Device, unsigned char *p_Data, 
								  unsigned char u_len );








///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
/*****************************************************                       
*				bsp_RecvHandler
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_RecvHandle( p_appdevice p_Device );

/*****************************************************                       
*				bsp_RecvHandler
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t bsp_SendHandle( p_appdevice p_Device );

#endif
